package com.ruoyi.common.gscUtil.StudyUtil.ThreadPoolExecutorUtil;

import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

/**
 * ReentrantReadWriteLock 是一种读写锁，它将锁分为读锁和写锁：   可重入读写锁
 * 读锁：允许多个线程同时读取共享资源。
 * 写锁：独占锁，同一时刻只允许一个线程写入共享资源。
 * 使用场景
 * 适合**读多写少**的场景，可以提高并发性能。
 *
 *
 *   **** 可重入锁 ReentrantLock 适合 《写多读少》  的场景****
 */
public class ReadWriteLockExample {
    private final ReadWriteLock rwLock = new ReentrantReadWriteLock();
    private int sharedData = 0;

    public void readData() {
        rwLock.readLock().lock(); // 获取读锁
        try {
            System.out.println("Read data: " + sharedData);
        } finally {
            rwLock.readLock().unlock(); // 释放读锁
        }
    }

    public void writeData(int data) {
        rwLock.writeLock().lock(); // 获取写锁
        try {
            sharedData = data;
            System.out.println("Write data: " + sharedData);
        } finally {
            rwLock.writeLock().unlock(); // 释放写锁
        }
    }
}